package com.bto.solar.work.fdd.client;

import com.bto.solar.work.common.BizException;
import com.fasc.open.api.bean.base.BaseRes;
import com.fasc.open.api.enums.doc.FileTypeEnum;
import com.fasc.open.api.exception.ApiException;
import com.fasc.open.api.utils.ResultUtil;
import com.fasc.open.api.v5_1.client.DocClient;
import com.fasc.open.api.v5_1.client.TemplateClient;
import com.fasc.open.api.v5_1.req.doc.FddFileUrl;
import com.fasc.open.api.v5_1.req.doc.FileProcessReq;
import com.fasc.open.api.v5_1.req.doc.UploadFileByUrlReq;
import com.fasc.open.api.v5_1.res.doc.FileId;
import com.fasc.open.api.v5_1.res.doc.FileProcessRes;
import com.fasc.open.api.v5_1.res.doc.UploadFileByUrlRes;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Slf4j
@Service
public class FddFileClient {

    @Autowired
    private FddBaseClient fddBaseClient;

    /**
     * 创建文档管理客户端
     */
    public DocClient getFddDocClient() {
        return new DocClient(fddBaseClient.getFddOpenApiClient());
    }

    /**
     * 通过网络文件地址上传
     */
    public String uploadFileByUrl(String httpUrl){
        try {
            UploadFileByUrlReq req = new UploadFileByUrlReq();
            req.setAccessToken(fddBaseClient.getFddAccessToken());
            //文件的用途类型FileTypeEnum：doc：用于签署的文档，如果是文档类型，需要转换成PDF。attach：用于签署文档的附件。
            req.setFileType(FileTypeEnum.DOC.getCode());
            //文网络文件URL
            req.setFileUrl(httpUrl);
            BaseRes<UploadFileByUrlRes> res = getFddDocClient().uploadFileByUrl(req);
            fddBaseClient.isResultSuccess(res, "法大大网络上传文件失败");
            return res.getData().getFddFileUrl();
        } catch (ApiException e) {
            throw new BizException("uploadFileByUrl is {} 法大大网络上传文件失败 {}", httpUrl, e);
        }
    }

    /**
     * 文件处理
     */
    public List<FileId> fillProcess(String fddFileUrlStr, String fileName)  {
        try {
            FileProcessReq req = new FileProcessReq();
            req.setAccessToken(fddBaseClient.getFddAccessToken());
            List<FddFileUrl> list = new ArrayList<>();
            FddFileUrl fddFileUrl = new FddFileUrl();
            //文件的用途类型FileTypeEnum：doc：用于签署的文档，如果是文档类型，需要转换成PDF。attach：用于签署文档的附件。
            fddFileUrl.setFileType(FileTypeEnum.DOC.getCode());
            //法大大云存储中的源文件地址
            fddFileUrl.setFddFileUrl(fddFileUrlStr);
            //文件名称，必须包含扩展名
            fddFileUrl.setFileName(fileName);
            list.add(fddFileUrl);
            req.setFddFileUrlList(list);
            BaseRes<FileProcessRes> res = getFddDocClient().process(req);
            fddBaseClient.isResultSuccess(res, "法大大文件处理失败");
            return res.getData().getFileIdList();
        } catch (ApiException e) {
            throw new BizException("fillProcess is {} 法大大文件处理失败 {}", fileName, e);
        }

    }


}




